package top.continew.ai.util.parse;

import org.springframework.ai.document.Document;
import org.springframework.ai.reader.ExtractedTextFormatter;
import org.springframework.ai.reader.pdf.ParagraphPdfDocumentReader;
import org.springframework.ai.reader.pdf.config.PdfDocumentReaderConfig;
import org.springframework.core.io.FileSystemResource;

import java.util.List;

/**
 * 使用 PDF 目录（例如 TOC）信息将输入的 PDF 拆分为文本段落，并每个段落输出一个。
 * 注意：并非所有 PDF 文档都包含 PDF 目录
 *
 * @Author： Lonni
 * @Date： 2025/8/21  15:51
 */
public class ParagraphPdfParse implements BaseParse{
    /**
     * 解析并切分文件
     *
     * @param filePath
     * @param fileName
     * @return
     */
    @Override
    public List<Document> renderDocment(String filePath, String fileName) {
        FileSystemResource resource = new FileSystemResource(filePath);
        ParagraphPdfDocumentReader pdfReader = new ParagraphPdfDocumentReader(resource,
                PdfDocumentReaderConfig.builder()
                        // 不同的PDF生成工具可能使用不同的坐标系 ， 如果内容识别有问题， 可以设置该属性为true
                        .withReversedParagraphPosition(true)
                        // 上边距
                        .withPageTopMargin(0)
                        .withPageExtractedTextFormatter(ExtractedTextFormatter.builder()
                                // 从页面文本中删除前 N 行
                                .withNumberOfTopTextLinesToDelete(0)
                                .build())
                        .build());
        List<Document> documents = pdfReader.read();
        return documents;
    }
}
